﻿//
// Lightbox Gallery Module for DotNetNuke
// Project Contributors - Will Strohl (http://www.WillStrohl.com), Armand Datema (http://www.schwingsoft.com)
//
//Copyright (c) 2009-2013, Will Strohl
//All rights reserved.
//
//Redistribution and use in source and binary forms, with or without modification, are 
//permitted provided that the following conditions are met:
//
//Redistributions of source code must retain the above copyright notice, this list of 
//conditions and the following disclaimer.
//
//Redistributions in binary form must reproduce the above copyright notice, this list 
//of conditions and the following disclaimer in the documentation and/or other 
//materials provided with the distribution.
//
//Neither the name of Will Strohl, Armand Datema, Lightbox Gallery, nor the names of its contributors may be 
//used to endorse or promote products derived from this software without specific prior 
//written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
//EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
//OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
//SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
//TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
//BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
//CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
//DAMAGE.
//

//INSTANT C# NOTE: Formerly VB project-level imports:
using DotNetNuke.Common.Utilities;
using System;
using System.Globalization;
using DotNetNuke.Entities.Modules;
using DotNetNuke.Services.Exceptions;

namespace WillStrohl.Modules.Lightbox
{

	[Serializable()]
	public sealed class LightboxInfo : ILightboxInfo, IHydratable
	{

#region  Private Members 

		private string p_GalleryDescription = Null.NullString;
		private string p_GalleryFolder = Null.NullString;
		private string p_GalleryName = Null.NullString;
		private int p_LightboxId = Null.NullInteger;
		private int p_ModuleId = Null.NullInteger;
		private int p_DisplayOrder = Null.NullInteger;
		private bool p_HideTitleDescription = false;
		private int p_LastUpdatedBy = Null.NullInteger;
		private DateTime p_LastUpdatedDate = Null.NullDate;
	    private int p_GroupId = Null.NullInteger;

#endregion

#region  Public Properties 

		public string GalleryDescription
		{
			get
			{
				return p_GalleryDescription;
			}
			set
			{
				p_GalleryDescription = value;
			}
		}

		public string GalleryFolder
		{
			get
			{
				return p_GalleryFolder;
			}
			set
			{
				p_GalleryFolder = value;
			}
		}

		public string GalleryName
		{
			get
			{
				return p_GalleryName;
			}
			set
			{
				p_GalleryName = value;
			}
		}

		public int LightboxId
		{
			get
			{
				return p_LightboxId;
			}
			set
			{
				p_LightboxId = value;
			}
		}

		public int ModuleId
		{
			get
			{
				return p_ModuleId;
			}
			set
			{
				p_ModuleId = value;
			}
		}

		public int DisplayOrder
		{
			get
			{
				return p_DisplayOrder;
			}
			set
			{
				p_DisplayOrder = value;
			}
		}

		/// <summary>
		/// HideTitleDescription - a flag to determine if the title and description should be shown, or hidden
		/// </summary>
		/// <value>Boolean - if true, the title and description will not be visible</value>
		/// <returns>Boolean - defaults to False for backwards compatibility</returns>
		/// <remarks></remarks>
		/// <history>
		/// 20101013 - wstrohl - Added.
		/// </history>
		public bool HideTitleDescription
		{
			get
			{
				return p_HideTitleDescription;
			}
			set
			{
				p_HideTitleDescription = value;
			}
		}

		public int LastUpdatedBy
		{
			get
			{
				return p_LastUpdatedBy;
			}
			set
			{
				p_LastUpdatedBy = value;
			}
		}

		public DateTime LastUpdatedDate
		{
			get
			{
				return p_LastUpdatedDate;
			}
			set
			{
				p_LastUpdatedDate = value;
			}
		}

        public int GroupId
        {
            get
            {
                return p_GroupId;
            }
            set
            {
                p_GroupId = value;
            }
        }

#endregion

		public LightboxInfo()
		{
			// do nothing
		}

#region  IHydratable Implementation 

		public int KeyID
		{
			get
			{
				return p_LightboxId;
			}
			set
			{
				p_LightboxId = value;
			}
		}

		public void Fill(System.Data.IDataReader dr)
		{
			try
			{
				while (dr.Read())
				{
					if (dr[LightboxInfoMembers.LightboxIdField] != null)
					{
						p_LightboxId = int.Parse(dr[LightboxInfoMembers.LightboxIdField].ToString(), NumberStyles.Integer);
					}
					if (dr[LightboxInfoMembers.ModuleIdField] != null)
					{
						p_ModuleId = int.Parse(dr[LightboxInfoMembers.ModuleIdField].ToString(), NumberStyles.Integer);
					}
					if (dr[LightboxInfoMembers.GalleryNameField] != null)
					{
						p_GalleryName = dr[LightboxInfoMembers.GalleryNameField].ToString();
					}
					if (dr[LightboxInfoMembers.GalleryDescriptionField] != null)
					{
						p_GalleryDescription = dr[LightboxInfoMembers.GalleryDescriptionField].ToString();
					}
					if (dr[LightboxInfoMembers.GalleryFolderField] != null)
					{
						p_GalleryFolder = dr[LightboxInfoMembers.GalleryFolderField].ToString();
					}
					if (dr[LightboxInfoMembers.DisplayOrderField] != null)
					{
						p_DisplayOrder = int.Parse(dr[LightboxInfoMembers.DisplayOrderField].ToString(), NumberStyles.Integer);
					}
					if (dr[LightboxInfoMembers.LastUpdatedByField] != null)
					{
						try
						{
							p_LastUpdatedBy = int.Parse(dr[LightboxInfoMembers.LastUpdatedByField].ToString(), NumberStyles.Integer);
						}
						catch
						{
							// do nothing
						}
					}
					if (dr[LightboxInfoMembers.LastUpdatedDateField] != null)
					{
						try
						{
							p_LastUpdatedDate = DateTime.Parse(dr[LightboxInfoMembers.LastUpdatedDateField].ToString());
						}
						catch
						{
							p_LastUpdatedDate = DateTime.Now;
						}
					}
					try
					{
						if (dr[LightboxInfoMembers.HideTitleDescriptionField] != null)
						{
							p_HideTitleDescription = bool.Parse(dr[LightboxInfoMembers.HideTitleDescriptionField].ToString());
						}
					}
					catch
					{
                        // do nothing - new field added, so a valid value might not exist immediately after upgrade
					}

                    try
                    {
                        if (dr[LightboxInfoMembers.GroupIdField] != null)
                        {
                            try
                            {
                                p_GroupId = int.Parse(dr[LightboxInfoMembers.GroupIdField].ToString(),
                                                      NumberStyles.Integer);
                            }
                            catch
                            {
                                // do nothing
                            }
                        }
                    }
                    catch
                    {
                        // do nothing - new field added, so a valid value might not exist immediately after upgrade
                    }
				}
			}
			catch (Exception ex)
			{
				Exceptions.LogException(ex);
			}
			finally
			{
				if (! dr.IsClosed)
				{
					dr.Close();
				}
			}
		}

#endregion

	}

}